# STA-Server zum Schalten einer LED (an Pin 12) # getestet am 29.06.2020; funktioniert! # Der Parameter "/LED_AN" bzw. "/LED_AUS" bei href wird durch das HTTP-Protokoll als GET-Parameter # im Request an den ESP32 gesendet. Indem wir ihn aus der Zeichenkette "request" mit split extrahieren, # können wir die LED ein- und ausschalten. # Zum Beenden des Programms Ctrl-C eingeben # Chrome-Browser des Handys baut nach dem Empfang des Response automatisch eine neue Verbindung zum Server auf; # eine neuer Request wird natürlich erst abgesendet, wenn ein Link batätigt wird. # Das blockiert den Server für andere Clients! Abhilfe mit timeout für recv. Siehe wlan_station_led_server_0_time_out. # Später in Kapitel "... tunen" berücksichtigen!!! import network import socket from machine import Pin from time import time # Wlan-Zugangsdaten; hier Ihre Wlan-Daten eintragen: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ssid = 'mipamipa' password = 'Asdfghjkl1234' # Konfiguration von LED led=Pin(12, Pin.OUT) led.value(1) # einschalten def getrequest(connection): result = '' block_size = 512 while True: data = connection.recv(block_size) result += str(data, 'UTF-8') if result.find('\r\n\r\n') >= 0: # Ende des Requests gefunden break return result def http_header(): return '''HTTP/1.1 200 OK\r Content-Type: text/html\r Connection: close\r \r ''' def html(): if led.value() == 1: led_state = 'AN' else: led_state = 'AUS' return '''
''' # Konfiguration des Wlans: station = network.WLAN(network.STA_IF) station.active(True) station.connect(ssid, password) time0 = time() while (not station.isconnected()) and (time() - time0 < 5): pass if station.isconnected(): print(station.ifconfig()) # Server bereit stellen s = socket.socket() s.bind(('', 80)) s.listen(5) print('Server ready...') # Daten holen while True: print('-----------------------------------------') connection, addr = s.accept() print("Client connected: ", addr) # Request empfangen und auswerten request = getrequest(connection) print(request) # zum Testen getparam = request.split(' ')[1] # vgl. Kapitel 10 print('GET-Parameter: ', getparam) # zum Testen if getparam == '/LED_AN': led.value(1) print('Now: LED on') if getparam == '/LED_AUS': led.value(0) print('Now: LED on') if getparam == '/favicon.ico': # zum Testen print('FAVICON') if getparam == '/': # zum Testen print('LED State!') connection.send(http_header()) connection.send(html()) connection.close() station.active(False) print('Wlan deactivated') print('Please reset!')